package co.edu.javeriana.konigsberg.xavier.servicio;

import java.math.BigInteger;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.ejb.EJB;
import javax.ejb.Stateful;
import javax.ejb.Stateless;

import co.edu.javeriana.konigsberg.xavier.dao.desc.CategoriaDAOLocal;
import co.edu.javeriana.konigsberg.xavier.dto.CategoriaDTO;
import co.edu.javeriana.konigsberg.xavier.entidad.Categoria;

/**
 * Session Bean implementation class CategoriaServicio
 */
@Stateless
public class CategoriaServicio implements CategoriaServicioRemote, CategoriaServicioLocal {
	
	@EJB
	private CategoriaDAOLocal categoriaDAO;
	
	private static Map<BigInteger, CategoriaDTO> mapaCategorias;
	
	private List<CategoriaDTO> categoriaDTOs;
	
    public CategoriaServicio() {
    }
    
    @Override
    public List<CategoriaDTO> obtenerLista(){
    	
    	if(mapaCategorias == null){
    		categoriaDTOs = new ArrayList<CategoriaDTO>();
    		mapaCategorias = new HashMap<BigInteger, CategoriaDTO>();
	    	List<Categoria> categorias = categoriaDAO.obtenerLista();
			for (Categoria categoria : categorias) {
				CategoriaDTO categoriaDTO = getDTO(categoria);
				categoriaDTOs.add(categoriaDTO);
				mapaCategorias.put(categoriaDTO.getIdCategoria(), categoriaDTO);
			}
    	}
		return categoriaDTOs;
	}

	@Override
	public CategoriaDTO obtenerCategoriasPorId(BigInteger id) {
		if(mapaCategorias == null){
			obtenerLista();
		}
		return mapaCategorias.get(id);
	}

	@Override
	public CategoriaDTO getDTO(Object entidad) {
		Categoria categoria = (Categoria)entidad;
		CategoriaDTO categoriaDTO = new CategoriaDTO();
		categoriaDTO.setIdCategoria(categoria.getIdCategoria());
		categoriaDTO.setNombreCategoria(categoria.getNombreCategoria());
		return categoriaDTO;
	}

	public List<CategoriaDTO> getCategoriaDTOs() {
		return categoriaDTOs;
	}

	public void setCategoriaDTOs(List<CategoriaDTO> categoriaDTOs) {
		this.categoriaDTOs = categoriaDTOs;
	}

}
